Стандарт описания функций-действий

Ниже приведён рекомендованный порядок создания функций-действий, позволяющий гарантированно покрыть весь необходимый функционал.

Все функции стандартной библиотеки созданы по этому стандарту.

Для пользовательских кастомизированных функций также желательно придерживаться этого порядка.

Фильтр для недоступных объектов (по месту)

Для всех объектов, передаваемых функции как аргумент, парсер устанавливает ключ места - 'м':

  • #Дм - объект находится в доступном месте, к нему можно прикоснуться;
  • #Вм - объект находится в видимом месте, на него можно посмотреть;
  • #!м - объект находится вне локации, действия с ним недоступны.

....

Фильтр для классов

Значения типа "class" исправно подбираются парсером и передаются в функции с ключом #!м. В соответствии с предыдущим параграфом большинство функций отсеивает классы по этому ключу.

Но как правило, действия работают с конкретными объектами, а не с абстакциями.

....

Декоративные функции-заглушки

Большинство действий нацелены на определённый класс объектов; например, есть можно только еду. Соответствующая функция в общем виде будет выглядеть так:

action(есть _действие#Пф!е, еда _что#ВпДм!е){ //... }

При попытке съесть что-нибудь не являющееся едой, эта функция не сработает и игрок увидит одно из стандартных сообщений:

> съешь бревно
Никак невозможно съесть бревно.

Чтобы разнообразить ответные реакции игры и сделать их более "человеческими" к каждой рабочей функции в пару необходисо создать декоративную функцию-заглушку:

action(есть _действие#Пф!е, предмет _что#ВпДм!е)
{ --check--
  fail, $"{_что*#Ип} не{$съедобное*_что*#ИпКф}."
}

Эта функция ничего не делает, а только формирует сообщение о невозможности выполнения действия с данным предметом:

> съешь камень
камень не съедобен.

Так как область класса @предмет шире чему у класса @еда, то и область применения декоративной функции получается шире чем у рабочей. Полиморфизм функций в каждом конкретном случае требует применения более узкой, более подходящей к текущей ситуации, функции. Таким образом декоративная функция не замещает рабочую, а дополняет её, расширяя охват обрабатываемых объектов.

Действия с декорациями

....

Действия со списками

....

Кастомизация действий

....




Примечания

Используйте данную функцию для установки необходимого значения внутренних переменных системы, таких как разрешение экрана, заголовок окна, название файла протокола и т.д. И хотя многие из них имеют значения по умолчанию, как мимнимум переменная HGE_FRAMEFUNC должна быть установлена перед вызовом System_Start.

Смотри секцию System states полного описания переменных системы.

Смотрите также

System_GetState, System states, System state value class


to do:
Дописать!